﻿using System;
using System.Collections.Generic;
using System.Linq;
using EnterpriseLibraryWrapper;
using itau.im.dado;
using itau.im.entidade;
using Itau.IM.CAS;

namespace itau.im.negocio
{
    public class GrupoParametrosBS : IGrupoParametrosBS
    {
        #region Metodos

        public void CriarProdutoFinanceiroAlocacoes(int codigoGrupoParametros, IList<ProdutoFinanceiro> listaProdutosFinanceiros)
        {
            //Declara o objeto
            IGrupoParametrosDAO grupoParametrosDAO;
            ProdutoFinanceiroAlocacao objProdutoFinanceiroAlocacao;

            try
            {
                //Instancia o objeto
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();
                objProdutoFinanceiroAlocacao = new ProdutoFinanceiroAlocacao();

                //percorre a lista
                foreach (ProdutoFinanceiro objProdutoFinanceiro in listaProdutosFinanceiros)
                {
                    foreach (ProdutoFinanceiroDerivado objProdFinDer in objProdutoFinanceiro.ProdutoFinanceiroDerivado)
                    {
                        //monta o objeto ProdutoFinanceiroAlocacao
                        objProdutoFinanceiroAlocacao.CodigoGrupoParametroAtribuicao = codigoGrupoParametros;
                        objProdutoFinanceiroAlocacao.CodigoProdutoFinanceiro = objProdFinDer.CodigoProdutoFinanceiro;
                        objProdutoFinanceiroAlocacao.CodigoProdutoFinanceiroDerivado = objProdFinDer.CodigoProdutoFinanceiroDerivado;
                        objProdutoFinanceiroAlocacao.DataInicioVigenciaProduto = DateTime.Now;
                        objProdutoFinanceiroAlocacao.DataFimVigencia = DateTime.MinValue;

                        //chama o método CriarProdutoFinanceiroAlocacao
                        grupoParametrosDAO.CriarProdutoFinanceiroAlocacao(objProdutoFinanceiroAlocacao);
                    }
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                grupoParametrosDAO = null;
                objProdutoFinanceiroAlocacao = null;
            }
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 24/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Obter Parametros Atribuicao Por Grupo Vigente                                   <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <param name="codigoGrupo">codigoGrupo</param>
        /// <returns>Lista de ParametroAtribuicao</returns>
        public IList<ParametroAtribuicao> ObterParametrosAtribuicaoPorGrupoVigente(int codigoGrupo)
        {
            //Declara o objeto
            IList<ParametroAtribuicao> listaParametrosAlocados = null;
            IGrupoParametrosDAO grupoParametrosDAO;

            try
            {
                //Instância o objeto DAO
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                //Recupera a lista
                listaParametrosAlocados = grupoParametrosDAO.ObterParametrosAtribuicaoPorGrupoVigente(codigoGrupo);

                using (IntegracaoCAS CAS = new IntegracaoCAS())
                {
                    return CAS.FiltrarRegistros<ParametroAtribuicao>(listaParametrosAlocados, DominioAcesso.Parametro, Itau.IM.CAS.TipoAcesso.Consulta);
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaParametrosAlocados = null;
                grupoParametrosDAO = null;
            }

            //Retorna consulta vazia
            return new List<ParametroAtribuicao>();
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 25/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Método RemoverGrupoParametroAtribuicao.                                                              <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        public void RemoverGrupoParametroAtribuicao(int codigoGrupo)
        {
            //Declara o objeto
            IGrupoParametrosDAO GrupoParametrosDAO;

            try
            {
                using (IntegracaoCAS CAS = new IntegracaoCAS())
                {
                    if (!CAS.UsuarioAdministrador)
                    {
                        System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Unauthorized;
                    }
                }

                //Instância o objeto DAO
                GrupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                GrupoParametrosDAO.RemoverProdutoFinanceiroAlocacoes(codigoGrupo);

                GrupoParametrosDAO.RemoverParametroAtribuicaoGrupoAlocacoes(codigoGrupo);

                GrupoParametrosDAO.RemoverGrupoParametroAtribuicao(codigoGrupo);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (CASException ce)
            {
                throw new Exception(ce.Message);
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                //Finaliza o objeto
                GrupoParametrosDAO = null;
            }
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 25/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Método para remover um ProdutoFinanceiroAlocacao.                               <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <param name="codigoGrupo">CodigoGrupo</param>
        public void RemoverProdutoFinanceiroAlocacoes(int codigoGrupo, DateTime dataHoraFim)
        {
            IGrupoParametrosDAO grupoParametrosDAO;


            try
            {
                ProdutoFinanceiroAlocacao ProdutoFinanceiroAlocacao = new ProdutoFinanceiroAlocacao();
                ProdutoFinanceiroAlocacao.CodigoGrupoParametroAtribuicao = codigoGrupo;
                ProdutoFinanceiroAlocacao.DataFimVigencia = dataHoraFim;

                //Instância o objeto DAO
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                //Atualiza Produto Financeiro
                grupoParametrosDAO.AtualizarProdutoFinanceiroAlocacao(ProdutoFinanceiroAlocacao);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                //Finaliza o objeto
                grupoParametrosDAO = null;
            }
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 02/09/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Método para remover um Parametro Atribuicao Grupo Alocacao.                     <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <param name="listaParametroAtribuicaoGrupoAlocacao">listaParametroAtribuicaoGrupoAlocacao</param>
        public void RemoverParametroAtribuicaoGrupoAlocacao(IList<ParametroAtribuicaoGrupoAlocacao> listaParametroAtribuicaoGrupoAlocacao)
        {
            IGrupoParametrosDAO grupoParametrosDAO;

            try
            {
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                foreach (ParametroAtribuicaoGrupoAlocacao parametroAtribuicaoGrupoAlocacao in listaParametroAtribuicaoGrupoAlocacao)
                {
                    parametroAtribuicaoGrupoAlocacao.DataFimVigencia = System.DateTime.Today.AddDays(-1);
                    grupoParametrosDAO.AtualizarParametroAtribuicaoGrupoAlocacao(parametroAtribuicaoGrupoAlocacao);
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                //Finaliza o objeto
                grupoParametrosDAO = null;
            }
        }


        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 24/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Cria CriarGrupoParametros                                                       <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        public int CriarGrupoParametros(GrupoParametroAtribuicao grupoParametros)
        {
            IGrupoParametrosDAO grupoParametrosDAO;

            try
            {
                using (IntegracaoCAS CAS = new IntegracaoCAS())
                {
                    if (!CAS.UsuarioAdministrador)
                    {
                        System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Unauthorized;
                    }
                }

                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                //Retorno
                return grupoParametrosDAO.CriarGrupoParametros(grupoParametros);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (CASException ce)
            {
                throw new Exception(ce.Message);
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                //Finaliza os objetos
                grupoParametrosDAO = null;
            }
            return 0;
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 24/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Método que será implementado para retornar a consulta.                          <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <returns>Lista de objetos "ParametroAtribuicaoGrupoAlocacao".</returns>
        public IList<ParametroAtribuicaoGrupoAlocacao> ObterParametrosAtribuicaoGrupoAlocacaoPorGrupoParametrosVigente(int codigoGrupo)
        {
            //Declara o objeto
            IList<ParametroAtribuicaoGrupoAlocacao> lstParametroAtribuicaoGrupoAlocacao = null;

            try
            {
                //Instância o objeto DAO
                IGrupoParametrosDAO GrupoParametroDAO = DaoFactory.getGrupoParametrosDAO();

                //Recupera a lista
                lstParametroAtribuicaoGrupoAlocacao = GrupoParametroDAO.ObterParametrosAtribuicaoGrupoAlocacaoPorGrupoParametrosVigente(codigoGrupo);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }

            //Retorna consulta
            return lstParametroAtribuicaoGrupoAlocacao;
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 26/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Método ObterProdutoFinanceiroNaoAlocados                                        <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        public IList<ProdutoFinanceiro> ObterProdutosFinanceirosNaoAlocados()
        {
            //Declara o objeto
            IList<ProdutoFinanceiro> listaProdutosNaoAlocados = null;
            IGrupoParametrosDAO grupoParametroDAO = null;

            try
            {
                //Instância o objeto DAO
                grupoParametroDAO = DaoFactory.getGrupoParametrosDAO();

                //Recupera a lista
                listaProdutosNaoAlocados = grupoParametroDAO.ObterProdutosFinanceirosNaoAlocados();

                //Retorna consulta
                return listaProdutosNaoAlocados;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                //Desaloca o objeto
                listaProdutosNaoAlocados = null;
            }

            //Retorna consulta
            return new List<ProdutoFinanceiro>();
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 25/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Obter Produtos Financeiros Por Grupo Parametros Vigente                         <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <param name="codigoGrupo">codigoGrupo</param>
        /// <returns>Lista de ProdutoFinanceiro</returns>
        public IList<ProdutoFinanceiro> ObterProdutosFinanceirosPorGrupoParametrosVigente(int codigoGrupo)
        {
            //Declara o objeto
            IList<ProdutoFinanceiro> lstProdutoFinanceiro = null;
            IGrupoParametrosDAO grupoParametrosDAO;

            try
            {
                //Instância o objeto DAO
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                //Recupera a lista
                lstProdutoFinanceiro = grupoParametrosDAO.ObterProdutosFinanceirosPorGrupoParametrosVigente(codigoGrupo);

                //Retorna lista
                return lstProdutoFinanceiro;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                lstProdutoFinanceiro = null;
                grupoParametrosDAO = null;
            }

            //Retorna consulta vazia
            return new List<ProdutoFinanceiro>();
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 31/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Método que será implementado para retornar a consulta.                          <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <returns>Lista de objetos "ProdutoFinanceiro".</returns>
        /// <param name="codigoGrupo"></param>
        public IList<ProdutoFinanceiro> ObterProdutosExcecaoPorGrupoParametrosVigente(int codigoGrupo)
        {
            //Declara o objeto
            IList<ProdutoFinanceiro> listaprodutofinanceiro = null;

            try
            {
                //Instância do objeto DAO
                IGrupoParametrosDAO grupoparametroDAO = DaoFactory.getGrupoParametrosDAO();

                //Recupera a lista
                listaprodutofinanceiro = grupoparametroDAO.ObterProdutosExcecaoPorGrupoParametrosVigente(codigoGrupo);

                //Retorna a consulta
                return listaprodutofinanceiro;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                //Desaloca o objeto
                listaprodutofinanceiro = null;
            }

            //Retorna a consulta
            return new List<ProdutoFinanceiro>();
        }

        public IList<ProdutoFinanceiroDerivado> ObterProdutosFinanceirosDerivadosExcecaoPorGrupoParametrosVigente(int codigoGrupo)
        {
            //Declara o objeto
            IList<ProdutoFinanceiroDerivado> listaprodutofinanceiroDerivados = null;

            try
            {
                //Instância do objeto DAO
                IGrupoParametrosDAO grupoparametroDAO = DaoFactory.getGrupoParametrosDAO();

                //Recupera a lista
                listaprodutofinanceiroDerivados = grupoparametroDAO.ObterProdutosFinanceirosDerivadosExcecaoPorGrupoParametrosVigente(codigoGrupo);

                //Retorna a consulta
                return listaprodutofinanceiroDerivados;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                //Desaloca o objeto
                listaprodutofinanceiroDerivados = null;
            }

            //Retorna a consulta
            return new List<ProdutoFinanceiroDerivado>();
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 25/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Obter Dominios Parametros Atribuicao Por Grupo Vigente                          <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <param name="codigoGrupo">codigoGrupo</param>
        /// <returns>Lista de DominiosParametroAtribuicao</returns>
        public IList<DominioParametroAtribuicao> ObterDominiosParametrosAtribuicaoPorGrupoVigente(int codigoGrupo)
        {
            //Declara o objeto
            IList<DominioParametroAtribuicao> lista = null;
            IGrupoParametrosDAO grupoParametroDAO;

            try
            {
                //Instância o objeto DAO
                grupoParametroDAO = DaoFactory.getGrupoParametrosDAO();

                //Recupera a lista
                lista = grupoParametroDAO.ObterDominiosParametrosAtribuicaoPorGrupoVigente(codigoGrupo);

                //Retorna lista
                return lista;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                lista = null;
                grupoParametroDAO = null;
            }

            //Retorna consulta vazia
            return new List<DominioParametroAtribuicao>();
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 26/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Obter Parametros Nao Alocados Por Grupo Parametro Vigente                       <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <param name="codigoGrupo">codigoGrupo</param>
        /// <returns>Lista de ParametroAtribuicao</returns>
        public IList<ParametroAtribuicao> ObterParametrosNaoAlocadosPorGrupoParametroVigente(int codigoGrupo)
        {
            //Declara o objeto
            IList<ParametroAtribuicao> listaParametrosExogenos = null;
            IGrupoParametrosDAO grupoParametrosDAO;

            try
            {
                //Instância o objeto DAO
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                //Recupera a lista
                listaParametrosExogenos = grupoParametrosDAO.ObterParametrosNaoAlocadosPorGrupoParametroVigente(codigoGrupo);

                using (IntegracaoCAS CAS = new IntegracaoCAS())
                {
                    return CAS.FiltrarRegistros<ParametroAtribuicao>(listaParametrosExogenos, DominioAcesso.Parametro, Itau.IM.CAS.TipoAcesso.Consulta);
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaParametrosExogenos = null;
                grupoParametrosDAO = null;
            }

            //Retorna consulta vazia
            return new List<ParametroAtribuicao>();
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 25/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Método CriarParametroAtribuicaoGrupoAlocacoes                                   <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <param name="listaParametrosEndogenosAlocacao">Lista de Objetos do tipo ParametroAtribuicaoAlocacao</param>
        public void CriarParametroAtribuicaoGrupoAlocacoes(IList<ParametroAtribuicaoGrupoAlocacao> listaParametrosEndogenosAlocacao)
        {
            //Declara o objeto
            IGrupoParametrosDAO grupoParametrosDAO = null;

            //Cria o array com a Lista do tipo ParametroAtribuicaoGrupoAlocacao  
            ParametroAtribuicaoGrupoAlocacao[] listParametroAtribuicaoGrupoAlocacao = null;

            try
            {
                //Passa a lista para o array de ListaParametroAtribuicaoGrupoAlocacao
                listParametroAtribuicaoGrupoAlocacao = listaParametrosEndogenosAlocacao.ToArray();

                //Instancia o objeto
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                //Verifica se a listParametroAtribuicaoGrupoAlocacao esta vazia
                if (listParametroAtribuicaoGrupoAlocacao != null && listParametroAtribuicaoGrupoAlocacao.Length > 0)
                {
                    //Percorre cada objeto ParametroAtribuicaoGrupoAlocacao da lista para CriarParametroAtribuicaoGrupoAlocacao
                    foreach (ParametroAtribuicaoGrupoAlocacao parametroAtribuicaoGrupoAlocacao in listParametroAtribuicaoGrupoAlocacao)
                    {
                        //Atribui valor nulo para o parametro DataFimVigencia
                        parametroAtribuicaoGrupoAlocacao.DataFimVigencia = DateTime.MinValue;

                        //Chama o Método CriarParametroAtribuicaoGrupoAlocacao do objeto DAO
                        grupoParametrosDAO.CriarParametroAtribuicaoGrupoAlocacao(parametroAtribuicaoGrupoAlocacao);
                    }
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                grupoParametrosDAO = null;
            }
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 26/08/2010                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Obter Numero Parametro Atribuicao Grupo Alocacao Por Codigo Parametro           <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary>
        /// <param name="codigoParametro">codigoParametro</param>
        /// <returns>valor inteiro codigoParametro</returns>
        public int ObterNumeroParametroAtribuicaoGrupoAlocacaoPorCodigoParametro(int codigoParametro)
        {
            //Declara o objeto
            int numeroEndogenos;
            IGrupoParametrosDAO grupoParametrosDAO;

            try
            {
                //Instância o objeto DAO
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                //Recupera retorno do metodo
                numeroEndogenos = grupoParametrosDAO.ObterNumeroParametrosAtribuicaoGrupoAlocacaoPorCodigoParametro(codigoParametro);

                //Retorna numeroEndogenos
                return numeroEndogenos;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                grupoParametrosDAO = null;
            }
            //Retorna consulta vazia
            return 0;
        }

        public IList<RegraAtribuicaoCurva> ObterRegras(int codigoGrupo, DateTime dataInclusaoVigencia)
        {
            IList<RegraAtribuicaoCurva> listaRegras = null;
            IGrupoParametrosDAO grupoParametrosDAO;

            try
            {
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();
                listaRegras = grupoParametrosDAO.ObterRegras(codigoGrupo, dataInclusaoVigencia);
                return listaRegras;
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                listaRegras = null;
                grupoParametrosDAO = null;
            }

            return new List<RegraAtribuicaoCurva>();
        }

        public IList<DominioParametroAtribuicao> ObterDominiosParametroAtribuicaoPorGrupoVigente(int codigoGrupo)
        {

            IGrupoParametrosDAO grupoParametrosDAO = null;

            try
            {
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();
                return grupoParametrosDAO.ObterDominiosParametrosAtribuicaoPorGrupoVigente(codigoGrupo);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                grupoParametrosDAO = null;
            }

            return null;
        }

        /// <summary>
        /// **************************************************************************************************<BR/>
        /// AUTOR           : Fábrica de Software                                                             <BR/>
        /// DATA DE CRIAÇÃO : 10/01/2011                                                                      <BR/>
        /// ALTERADO POR    :                                                                                 <BR/>
        /// DATA ALTERAÇÃO  :                                                                                 <BR/>
        /// OBJETIVO        : Método para obter a lista de parâmetros                                         <BR/>
        /// **************************************************************************************************<BR/> 
        /// </summary> 
        public IList<GrupoParametroAtribuicao> ObterGruposDeParametros()
        {
            // Declara a referência do objeto
            IGrupoParametrosDAO grupoParametrosDAO = null;

            try
            {
                // Instância o objeto DAO
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();

                using (IntegracaoCAS CAS = new IntegracaoCAS())
                {
                    return CAS.FiltrarRegistros<GrupoParametroAtribuicao>(grupoParametrosDAO.ObterGruposDeParametros(), DominioAcesso.GrupoParametro, Itau.IM.CAS.TipoAcesso.Consulta);
                }
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                // Remove a referência do objeto
                grupoParametrosDAO = null;
            }

            // Retorna nulo
            return null;
        }

        public int ObterCodigoGrupoParametroAtribuicao(ProdutoFinanceiroDerivado produtoFinanceiroDerivado, DateTime dataInicioVigencia)
        {
            IGrupoParametrosDAO grupoParametrosDAO = null;

            try
            {
                grupoParametrosDAO = DaoFactory.getGrupoParametrosDAO();
                return grupoParametrosDAO.ObterCodigoGrupoParametroAtribuicao(produtoFinanceiroDerivado, dataInicioVigencia);
            }
            catch (DadosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (NegociosException ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            catch (Exception ex)
            {
                EnterpriseLibraryFactory.GetExceptionHandler().HandleException(ex, "ErrosNegocios");
            }
            finally
            {
                // Remove a referência do objeto
                grupoParametrosDAO = null;
            }

            return 0;
        }

        #endregion
    }
}